package com.akk.module.avs.service;

import com.akk.module.avs.entity.*;
import com.akk.module.avs.mapper.AvsYbCardMapper;
import com.akk.module.avs.mapper.AvsYbCardTagsMapper;
import com.akk.module.avs.mapper.AvsYbTagsMapper;
import com.akk.module.avs.mapper.dao.AvsYbTagsDao;
import com.akk.module.avs.model.response.AvsYbCardTagsRes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

@Service
public class AvsYbTagsService {

    @Autowired
    private AvsYbTagsExample tagsExample;

    @Autowired
    private AvsYbTagsMapper tagsMapper;

    @Autowired
    private AvsYbCardExample cardExample;

    @Autowired
    private AvsYbTagsDao tagsDao;

    @Autowired
    private AvsYbCardTagsMapper cardTagsMapper;

    @Autowired
    private AvsYbCardTagsExample cardTagsExample;

    @Autowired
    private AvsYbCardMapper cardMapper;

    public List<AvsYbTags> findByParams(Map params){
        tagsExample.clear();
        AvsYbTagsExample.Criteria criteria = tagsExample.createCriteria();
        if (params.containsKey("typeId"))
            criteria.andTagTypeIdEqualTo(Long.valueOf(params.get("typeId").toString()));
        if (params.containsKey("appId"))
            criteria.andAppIdEqualTo(params.get("appId").toString());
        return tagsMapper.selectByExample(tagsExample);
    }

    public List<AvsYbCardTagsRes> find(Map params){
        tagsExample.clear();
        AvsYbTagsExample.Criteria criteria = tagsExample.createCriteria();
        if (params.containsKey("typeId"))
            criteria.andTagTypeIdEqualTo(Long.valueOf(params.get("typeId").toString()));
        if (params.containsKey("appId"))
            criteria.andAppIdEqualTo(params.get("appId").toString());
        return tagsDao.findByParams(params);
    }


    public void save(AvsYbTags tags){
        tagsMapper.insert(tags);
    }

    @Transactional
    public void del(Long tagId){
        tagsDao.deleteCardByTagId(tagId);
        tagsMapper.deleteByPrimaryKey(tagId);
        cardTagsExample.clear();
        cardTagsExample.createCriteria().andTagIdEqualTo(tagId);
        cardTagsMapper.deleteByExample(cardTagsExample);
    }

    public List<AvsYbTags> cardTags(Long cardId){
        return tagsDao.findCardTags(cardId);
    }

    public List<AvsYbTags> selectByTagId(List<Long> tagIds){
        tagsExample.clear();
        tagsExample.createCriteria().andTagIdIn(tagIds);
        return tagsMapper.selectByExample(tagsExample);
    }

}
